A conventional data processing device may use both volatile and non-volatile data storage devices. For instance, the data processing device may use a hard disk drive as a non-volatile mass storage device, while using random access memory (RAM) as a volatile storage device. The data processing device may also use non-volatile flash memory. Volatile storage may also be referred to as non-persistent storage. Conversely, non-volatile storage may also be referred to as persistent storage. Persistent storage maintains its contents even when not powered, while non-persistent storage does not reliably maintain its contents when not powered.
Typically, persistent mass data storage devices (e.g., hard disk drives) are file addressable, while non-persistent data storage devices (e.g., RAM) are location addressable or byte addressable. However, persistent storage devices may also be location addressable or byte addressable. For instance, the boot code for a data processing device may reside on flash memory that is byte addressable.
For purposes of this disclosure, the term “persistent memory” refers to data storage that is location addressable or byte addressable and that retains its contents even when not powered.
A data processing device may use one or more caches for improved performance. For instance, a central processing unit (CPU) may include one or more levels of cache. Similarly, memory controllers and other components may include data buffers.
In addition, a data processing device may be configured to use different techniques for storing data in different memory spaces. For instance, some or all of the addressable memory space may be configured to operate as write-back (WB) memory. When an application, an operating system, or other software stores data to WB memory, the data actually gets saved first in cache, and the data is then written into the ultimate memory location only under certain conditions or at predetermined intervals. When new data has been written to cache but not to the corresponding location in memory, the data in the cache is considered fresh, and the old data in memory is considered stale. In addition, the cache line that contains the fresh data is considered dirty.
When an operating system or an application stores or writes data to a specified location in persistent memory, there may be a significant delay between when the store instruction or operation is considered complete and when the data is actually stored in the persistent memory. Consequently, if power is lost after an application has executed a store instruction but before the corresponding data has reached the persistent memory domain, erroneous results may occur. For purposes of this disclosure, the term “persistent memory domain” refers to the hardware component (or collection of components) which guarantees that received data will be saved in persistent memory, even if power is lost after the data reaches that (those) hardware component(s). In addition, the term “PM software” refers to application software that stores data to persistent memory, an operating system that stores data to persistent memory, or other types of software that store data to persistent memory. Also, the term “durable” may be used to refer to data that has reached the persistent memory domain.
If a software developer uses great care and pays very close attention to many details, it may be possible for the developer to design PM software which addresses the risks of power loss and erroneous results. But, as described in greater detail below, addressing those risks at the application software level is probably not the best way to address those risks. Software developers could use improved methods and apparatus for supporting persistent memory.